﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio.Gestores;
using System.Data;
using Negocio.Entidades;

namespace autogestionAVEIT
{
    public partial class Proyecto : System.Web.UI.Page
    {
        private static DataTable dt;
        private static List<Actividad> actividades;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                panel_cuerpo.Visible = false;
                btn_nuevo_proyecto.Visible = true;
                btn_nuevo_proyecto.Enabled = true;
                panel_actividad.Visible = false;
                panel_pie.Visible = false; 

                ddl_socios_involucrados.DataTextField = "descripcion";
                ddl_socios_involucrados.DataValueField = "id_estado";
                ddl_socios_involucrados.DataSource = GestorProyecto.ObtenerTipoSocios();
                ddl_socios_involucrados.DataBind();
                ddl_socios_involucrados.Items.Insert(0, new ListItem("Seleccione un Tipo de Socio"));
                ddl_socios_involucrados.SelectedIndex = 0;

                ddl_subcomision.DataTextField = "descripcion";
                ddl_subcomision.DataValueField = "id_subComision";
                ddl_subcomision.DataSource = GestorProyecto.ObtenerSubcomisiones();
                ddl_subcomision.DataBind();
                ddl_subcomision.Items.Insert(0, new ListItem("Seleccione una Sub-Comisión"));
                ddl_subcomision.SelectedIndex = 0;

                //arreglar paginacion de las grillas.
                gv_actividades.DataSource = null;
                gv_actividades.EmptyDataText = "No hay actividades registradas para este proyecto";

                lbl_mensaje.Text = "";

                actividades = new List<Actividad>();

                dt = null;
                if (dt == null)
                {
                    dt = new DataTable();
                    inicializarGrillaActividades();
                }

                txt_nombre_proyecto.Focus();
            }
        }

        private static DataTable inicializarGrillaActividades()
        {
            dt.Columns.Add("Nombre");
            dt.Columns.Add("Descripción");
            dt.Columns.Add("Socio Encargado");
            dt.Columns.Add("Fecha Inicio");
            dt.Columns.Add("Fecha Fin");
            dt.Columns.Add("Finalizado");

            return dt;
        }
        public bool ValidarProyecto()
        {

            try
            {
                if (txt_nombre_proyecto.Text == "")
                { return false; }
                if (txt_objetivo_proyecto.Text == "")
                { return false; }
                if (txt_presupuesto.Text == "")
                { return false; }
                if (txt_fecha_inicio.Text == "")
                { return false; }
                if (txt_fecha_fin.Text == "")
                { return false; }
                if (DateTime.Compare(DateTime.Parse(txt_fecha_inicio.Text), DateTime.Parse(txt_fecha_fin.Text)) > 0)
                {
                    throw new ApplicationException("La fecha de Fin del Proyecto debe ser mayor o igual a la Fecha de Inicio.");
                }
                if (gv_actividades.Rows.Count == 0)
                {
                    throw new ApplicationException("No hay ninguna actividad cargada para este proyecto");
                }
                GestorSocio.ObtenerSocio(int.Parse(txt_socio_encargado_proyecto.Text));

                return true;
            }
            catch (ApplicationException ex)
            {
                lbl_mensaje.CssClass = "alert-danger";
                lbl_mensaje.Text = ex.Message;
            }
            return false;  
        }
        private void cargarGrillaActividades(DataTable dt)
        {
            gv_actividades.DataSource = dt;
            gv_actividades.DataBind();
        }
        private void limpiarActividad()
        {
            txt_nombre_actividad.Text = "";
            txt_descripcion_actividad.Text = "";
            txt_socio_encargado_actividad.Text = "";
            txt_fecha_inicio_actividad.Text = "";
            txt_fecha_fin_actividad.Text = "";
            ckb_actividad_finalizada.Checked = false;

        }
        private void limpiarProyecto()
        {
            txt_nombre_proyecto.Text = "";
            txt_objetivo_proyecto.Text = "";
            txt_fecha_inicio.Text = "";
            txt_fecha_fin.Text = "";
            txt_presupuesto.Text = "";
            txt_socio_encargado_proyecto.Text = "";
            ckb_proyecto_finalizado.Checked = false;
            ddl_socios_involucrados.SelectedIndex = 0;
            ddl_subcomision.SelectedIndex = 0;
            limpiarActividad();
            dt = null;
            dt = new DataTable();
            inicializarGrillaActividades();
        }
        
       
        protected void lnkb_agregar_actividad_Click(object sender, EventArgs e)
        {
            panel_actividad.Visible = true;
            txt_socio_encargado_actividad.Focus();

        }

        protected void gv_socios_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gv_socios_p.AllowPaging = true;
            gv_socios_p.PageIndex = e.NewPageIndex;
            gv_socios_p.DataSource = GestorSocio.ObtenerSocios();
            gv_socios_p.DataBind();
        }
        public void mostrarListaSocios(GridView gv)
        {
            List<Socio> socios;

            try
            {
                socios = GestorSocio.ObtenerSocios();

                gv.DataSource = socios;
                gv.DataBind();
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message);
            }
        }
        protected void btn_buscar_socio_proyecto_Click(object sender, EventArgs e)
        {
            gv_socios_p.Visible = true;
            mostrarListaSocios(gv_socios_p);
        }
        protected void gv_socios_SelectedIndexChanged(object sender, EventArgs e)
        {
            txt_socio_encargado_proyecto.Text = gv_socios_p.Rows[gv_socios_p.SelectedIndex].Cells[1].Text.ToString();
            gv_socios_p.Visible = false;
            txt_socio_encargado_proyecto.Focus();
        }

        protected void btn_buscar_socio_actividad_Click(object sender, EventArgs e)
        {
            gv_socios_actividad.Visible = true;
            mostrarListaSocios(gv_socios_actividad);
        }
        protected void gv_socios_actividad_SelectedIndexChanged(object sender, EventArgs e)
        {
            txt_socio_encargado_actividad.Text = gv_socios_actividad.Rows[gv_socios_actividad.SelectedIndex].Cells[1].Text.ToString();
            gv_socios_actividad.Visible = false;
            txt_socio_encargado_actividad.Focus();
        }

        protected void btn_agregar_actividad_Click(object sender, EventArgs e)
        {
            Actividad act = new Actividad();
            act.nombre_actividad = txt_nombre_actividad.Text;
            act.descripcion = txt_descripcion_actividad.Text;
            act.fecha_inicio = DateTime.Parse(txt_fecha_inicio_actividad.Text);
            act.fecha_fin = DateTime.Parse(txt_fecha_fin_actividad.Text);
            act.socio_encargado = int.Parse(txt_socio_encargado_actividad.Text);
            act.finalizado = ckb_actividad_finalizada.Checked;

            actividades.Add(act);

            //para mostrar si esta finalizado o no en la grilla
            string fin;
            if (ckb_actividad_finalizada.Checked)
            {
                fin = "Si";
            }
            else
            {
                fin = "No";
            }

            dt.Rows.Add(txt_nombre_actividad.Text, txt_descripcion_actividad.Text, int.Parse(txt_socio_encargado_actividad.Text), DateTime.Parse(txt_fecha_inicio_actividad.Text), DateTime.Parse(txt_fecha_fin_actividad.Text), fin);
            cargarGrillaActividades(dt);

            limpiarActividad();
            panel_actividad.Visible = false;

            btn_agregar_actividad.Focus();
            
        }

        protected void btn_cancelar_actividad_Click(object sender, EventArgs e)
        {
            limpiarActividad();
            panel_actividad.Visible = false;
        }

        protected void btn_cancelar_proyecto_Click(object sender, EventArgs e)
        {
            limpiarProyecto();
            panel_encabezado.Visible = true;
            btn_nuevo_proyecto.Visible = true;
            panel_cuerpo.Visible = false;
            panel_pie.Visible = false;

        }

        protected void btn_registrar_proyecto_Click(object sender, EventArgs e)
        {
            if (ValidarProyecto())
            {
                ProyectoE pro = new ProyectoE();
                pro.nombre = txt_nombre_proyecto.Text;
                pro.objetivo = txt_objetivo_proyecto.Text;
                pro.presupuesto = float.Parse(txt_presupuesto.Text);
                pro.socio_encargado = int.Parse(txt_socio_encargado_proyecto.Text);
                pro.subcomision = int.Parse(ddl_subcomision.SelectedValue);
                pro.fecha_inicio = DateTime.Parse(txt_fecha_inicio.Text);
                pro.fecha_fin = DateTime.Parse(txt_fecha_fin.Text);
                pro.socios_involucrados = int.Parse(ddl_socios_involucrados.SelectedValue);

                GestorProyecto.GuardarProyecto(pro, actividades);
                limpiarProyecto();

                panel_cuerpo.Visible = false;
                btn_nuevo_proyecto.Visible = true;
                panel_pie.Visible = false;

                lbl_mensaje.Text = "¡Proyecto registrado exitosamente!";
            }
            else
            {
                lbl_mensaje.Text = "Problemas!! " + lbl_mensaje.Text;
            }
        }

        protected void btn_nuevo_proyecto_Click(object sender, EventArgs e)
        {
            btn_nuevo_proyecto.Visible = false;
            panel_cuerpo.Visible = true;
            panel_pie.Visible = true;
            txt_nombre_proyecto.Focus();
        }
    }
}